My goal is to learn how to conduct a quantitative synthesis to better understand the current literature on the rupture of an intracranial aneurysm with conservative management.
After performing my systematic review, I have three aims:
The statistical approaches will be tailored to the source dataset and structure of the data which is characterised by the following:
To achieve these aims, the various packages and source dataset in R are loaded, and each part carried out with an explanation of the rationale for the data analysis. Version control is carred out with GitHub.
The following R packages were loaded: tidyverse, meta, metafor and BiasedUrn.
A single excel data file is loaded to carry out all data analysis, with all steps documented below to ensure reproducibility of research.
Vector types are corrected to integers, factors, doubles as appropriate, and stored as a new tibble.
Individual rupture risk at study entry can be calculated by calculating the proportion of patients who ruptured ie pi = xi / ni.
xi = cases ie number of aneurysm ruptures during follow up ni = total ie number of aneurysms at study entry pi = raw proportions ie xi / ni
These can then be combined across studies to consider a meta-analyis of proportions. When considering any meta-analsis, the basic steps are
For every dataset, a suitable effect measure must be chosen, and a choice should be made regarding the meta-analytical methods. Most meta-analytical methods weight the individual effect sizes from each study to create a pooled effect size. In this study, we will consider individual study proportions, and create a pooled summary proportion for rupture risk.
Given unique characteristics of the data that we are synthesising listed above, means that appropriate statistical methods for meta-analysis and calculation of the confidence intervals must be considered.
Classical meta-analytical methods have the potential to contribute to additional sparse data bias and give misleading results for rare events Bradburn 2007 from Cochrane.
The generic inverse variance method calculates the individual study effect size, and creates a pooled estimate after weighing each study by the inverse of the variance of the effect size estimate. This means that larger studies with smaller standard errors are given more weight than smaller studies with larger standard errors. This minimises the imprecision of the pooled effect size resut. A variation on the generic inverse variance method incorporates an assumption that there is some variation between studies, ie heterogeneity, while measuring the same effect. This produces a random effects meta-analysis, the most common of which is the the DerSimonian and Laird method DerSimonian 1986.
Regardless of the inverse variance or DL methods for data synthesis, if the individual study proportions are 0 or 1, the variance becomes undefined. In our dataset, some of the included studies have 0 ruptures and thus a proportion of 0. To overcome this issue, typically a continuity correction of 0.5 is applied. This creates risk of introducing additional sparse data bias and reducing the validity of the result, especially given that pi is close to both zero and 0.5.
To better stabilise the variance, and to normalise the distribution especially for small sample sizes or rare event rates, the double arcine transformation of Freeman-Tukey Freeman and Tukey 1950 can be used. After statistical procedures, the result can be later be backtransformed using the equation derived by Miller Miller 1978. However, the Miller back transformation utilsing the harmonic mean does affect the backtransformed proportion as described by Schwarzer 2019. This issue is particularly evident when there is a large range of sample sizes. This issue does affect our dataset since n in the studies varies from 22 to over 3323.
To overcome these statistical limitation for classical methods of pooling the individual study proportions, we can instead utilise the random intercept logistic regression model, a type of generalised mixed model, as recommended by Stinjen 2010 and Schwarzer 2019.
Our rationale for choice of a GLMM is based on the following:
The limitation of this statistical approach is that individual study weights utilised to pool the individual studies to create the pooled proportion will not be available.
Use of the CI is important, since CIs convey information about magnitude and precision of individual study effect size and the pooled meta-analytical effect size. The choice of the CI should be tailed to the dataset that is present. Options include:
We will choose the Wilson method for CI for the following reasons:
This is aligned with the recommendations of Vollset 1993, Agresti 1998, Newcombe 1998 and Brown 2001.
sizedata <- filter(maindata, size == 10)
Assumptions:
dat <- sizedata %>%
mutate(total_size = coalesce(num_anr,num)) %>%
drop_na(total_size) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
select(auth_year, rupt, total_size)
pes.summary.glmm = metaprop(rupt, total_size,
data=dat,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
pes.summary.glmm
## events 95%-CI
## Bor 2015 0.7444 [ 0.2535; 2.1655]
## Broderick 2009 1.8519 [ 0.5093; 6.5019]
## Burns 2009 0.5780 [ 0.1021; 3.2011]
## Byoun 2016 1.7628 [ 0.9871; 3.1288]
## Choi 2018 0.5780 [ 0.1021; 3.2011]
## Gibbs 2004 0.0000 [ 0.0000; 14.8655]
## Gondar 2016 0.8152 [ 0.2776; 2.3691]
## Guresir 2013 0.7812 [ 0.2660; 2.2715]
## Irazabal 2011 0.0000 [ 0.0000; 7.8652]
## Jeon 2014 0.3521 [ 0.0966; 1.2746]
## Jiang 2013 0.0000 [ 0.0000; 7.1348]
## Juvela 2013 22.9630 [16.6751; 30.7469]
## Loumiotis 2011 0.0000 [ 0.0000; 2.3446]
## Matsubara 2004 0.0000 [ 0.0000; 2.3736]
## Matsumoto 2013 2.6549 [ 0.9069; 7.5160]
## Mizoi 1995 0.0000 [ 0.0000; 15.4639]
## Morita 2012 1.8658 [ 1.4582; 2.3845]
## Murayama 2016 2.2384 [ 1.6660; 3.0014]
## Oh 2013 0.0000 [ 0.0000; 16.8179]
## Serrone 2016 0.5155 [ 0.0911; 2.8615]
## So 2010 1.1450 [ 0.3902; 3.3118]
## Sonobe 2010 1.5625 [ 0.7589; 3.1897]
## Teo 2016 2.3810 [ 0.8130; 6.7666]
## Thien 2017 0.6173 [ 0.1090; 3.4133]
## Tsukahara 2005 3.4722 [ 1.4921; 7.8703]
## Tsutsumi 2000 5.3571 [ 1.8386; 14.6073]
## Villablanca 2013 1.5544 [ 0.5300; 4.4697]
## Wiebers-R 1998 1.6901 [ 1.0717; 2.6558]
## Wilkinson 2018 0.0000 [ 0.0000; 14.8655]
## Zylkowski 2015 2.7273 [ 0.9318; 7.7131]
##
## Number of studies combined: k = 30
##
## events 95%-CI
## Fixed effect model 1.8355 [1.6061; 2.0970]
## Random effects model 1.2198 [0.7739; 1.9177]
##
## Quantifying heterogeneity:
## tau^2 = 0.9098; tau = 0.9538; I^2 = 84.4%; H = 2.54
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 189.86 29 < 0.0001 Wald-type
## 160.79 29 < 0.0001 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
## (only used to calculate individual study results)
## - Events per 100 observations
The output from the random effects meta-analysis using the GLMM:
Summary estimate is 1.22 with 95% CI 0.77 to 1.92
Note that for GLMMs no continuity correction is used. Meta documentation Given our rationale for choosing the GLMM, this should produce the least biased result and reasonable coverage probabilities for the 95% CI, as suggested by Stinjen 2010. Note CIs are using Wilson score method.
Remember that the confidence interval from this random-effects meta-analysis describes uncertainty in the location of average proportion across the individual studies. Thus there is likely to be an even higher degree of uncertainty in the true population rupture risk. Cochrane handbook 10.10.4.2
forest(pes.summary.glmm,
layout = "meta",
comb.fixed = FALSE,
comb.random = TRUE,
leftlabs = c("Study", "Ruptures", "Total"),
rightcols = c("effect", "ci"),
rightlabs = c("Ruptures per 100", "95% CI"),
smlab = " ",
xlim=c(0,10),
xlab = "Rupture Proportion per 100",
pooled.events = TRUE,
)
Heterogeniety refers to all types of variation across studies. Heterogeniety can be considered in terms of
Clinical and methodolocal heterogeniety cannot be calculated. These are both subjectively evaluated by the meta-analyst. If there is substantial clinical and/or methdological heterogeneity, a quantitative synthesis should not be performed to create a pooled effect measure, and instead a qualitative systematic review performed.
If clinical and methodological differences are not significant, then quantative synthesis is considered appropriate.
Overall, identification of heterogeniety is critical to assist in interpreting the results of the meta-analyis. This gives the reader confidence that the effect demonstrated is generalisable. It is impossible to completely avoid heterogeneity, however clinical and methodological heterogeneity can be minimised by using strict inclusion criteria.
Statitical heterogeneity is most commonly calculated using Cochrane’s Q statistic, tau-squared statistic or the Inconsistency measure I^2 statistic.
We will choose the I^2 statistic for the following reasons:
pes.summary.glmm
## events 95%-CI
## Bor 2015 0.7444 [ 0.2535; 2.1655]
## Broderick 2009 1.8519 [ 0.5093; 6.5019]
## Burns 2009 0.5780 [ 0.1021; 3.2011]
## Byoun 2016 1.7628 [ 0.9871; 3.1288]
## Choi 2018 0.5780 [ 0.1021; 3.2011]
## Gibbs 2004 0.0000 [ 0.0000; 14.8655]
## Gondar 2016 0.8152 [ 0.2776; 2.3691]
## Guresir 2013 0.7812 [ 0.2660; 2.2715]
## Irazabal 2011 0.0000 [ 0.0000; 7.8652]
## Jeon 2014 0.3521 [ 0.0966; 1.2746]
## Jiang 2013 0.0000 [ 0.0000; 7.1348]
## Juvela 2013 22.9630 [16.6751; 30.7469]
## Loumiotis 2011 0.0000 [ 0.0000; 2.3446]
## Matsubara 2004 0.0000 [ 0.0000; 2.3736]
## Matsumoto 2013 2.6549 [ 0.9069; 7.5160]
## Mizoi 1995 0.0000 [ 0.0000; 15.4639]
## Morita 2012 1.8658 [ 1.4582; 2.3845]
## Murayama 2016 2.2384 [ 1.6660; 3.0014]
## Oh 2013 0.0000 [ 0.0000; 16.8179]
## Serrone 2016 0.5155 [ 0.0911; 2.8615]
## So 2010 1.1450 [ 0.3902; 3.3118]
## Sonobe 2010 1.5625 [ 0.7589; 3.1897]
## Teo 2016 2.3810 [ 0.8130; 6.7666]
## Thien 2017 0.6173 [ 0.1090; 3.4133]
## Tsukahara 2005 3.4722 [ 1.4921; 7.8703]
## Tsutsumi 2000 5.3571 [ 1.8386; 14.6073]
## Villablanca 2013 1.5544 [ 0.5300; 4.4697]
## Wiebers-R 1998 1.6901 [ 1.0717; 2.6558]
## Wilkinson 2018 0.0000 [ 0.0000; 14.8655]
## Zylkowski 2015 2.7273 [ 0.9318; 7.7131]
##
## Number of studies combined: k = 30
##
## events 95%-CI
## Fixed effect model 1.8355 [1.6061; 2.0970]
## Random effects model 1.2198 [0.7739; 1.9177]
##
## Quantifying heterogeneity:
## tau^2 = 0.9098; tau = 0.9538; I^2 = 84.4%; H = 2.54
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 189.86 29 < 0.0001 Wald-type
## 160.79 29 < 0.0001 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
## (only used to calculate individual study results)
## - Events per 100 observations
I^2 = 84.4%, which is high, which means that the between study variation due to clinical and methodological variation between studies is high, and greater than that expected by random chance variation within studies. This may be explained by co-variates and thus consideration should be made to avoid data-sythesis or expore reasons for heterogeneity.
For interest, the tau-squared = 0.9098 and the Q-statistic is < 0.0001 which also confirms high between-study heterogeniety.
There are various strategies to explore and adddress heterogeneity. If there is considerable heterogeniety, there are 2 options.
Avoid quantitative data synthesis and pooling studies. If clinical and methodological heterogeneity are substantial, then a quantitative data synthesis shuld not be peformed.
Choosing to pool the data, while exploring heterogeneity. Heterogeneity can be explored through sub-group analysis or metaregression to help identify study-level effect modifiers. This is where the outcome varies in different population or intervention characteristics. Such sub-group and metaregression analyses should be pre-specified, and regardless they shoud be interpreted with caution and considered hypothesis generating.
Subgroup analyses require splitting of the data into subgroups to make comparison. Typically this data is hard to extract from the published literature, and thus are better utilised when individual patient level data have been pooled. Nonetheless, we will perform the sub-group meta-analysis above to explore heterogeneity and consider the limitations of the analyses.
Meta-regression allows the effects of multiple continuous and categorical variables to be investigated simultaneously, unlike subgroup analysis which considered categorical variables only. This generally utilises a random effect model to conduct the analysis in each subgroup, and then consider additional statistical testing to compare the pooled results across the subgroups. Meta-regression should generally not be considered when there are less than ten studies in a meta-analysis. The meta-regression cooeffient obtained describes how the outcome (dependent variable) changes withn unit increase in the potential effect modifier. If the outcome is a ratio measure, the log-transformed value should be used in the regression model. Cochrane Handbook 10.11.4
Meta-regression and sub-group analysis are non-randomized and observational in nature. It may not be possible to ajust for potential confounders and thus they can can lead to misleading conclusions. Even if there are a large number of covariates adjusted for, we cannot be certain that all potential confounders have been identified. These analyses cannot prove causality, and at best, they can be considered hypothesis generating.
Moving forward, we shall choose to pool the data, and explore heterogeneity with sub-group analyses and meta-regression.
Sub-group analyses
Meta-regression
Sensitivity analysis
To reduce the risk of false positives, and to ensure that there are adequate studies to consider pos hoc meta-regression, only one posthoc potential effect modifier is considered for metaregression each time, and in the multivariable model only 2 potential effect modifiers are considered.
Regardless, the outcomes of these subgroup analysis or meta-regression analyses are limited. They are entirely observational, susceptible to confounding bias from other study level characteristics, the level of statistical significance of the results within subgroups cannot be compared, and may not be generalisable since there is aggregation bias due to study-level data being used for analysis and not patient level data.
sizedata7 <- filter(maindata, size == 7)
Assumptions:
dat7 <- sizedata7 %>%
mutate(total_size = coalesce(num_anr,num)) %>%
drop_na(total_size) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
select(auth_year, rupt, total_size)
pes.summary.glmm7 = metaprop(rupt, total_size,
data=dat7,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
pes.summary.glmm7
## events 95%-CI
## Bor 2015 0.4963 [ 0.1362; 1.7912]
## Broderick 2009 1.8519 [ 0.5093; 6.5019]
## Byoun 2016 1.8613 [ 1.0424; 3.3018]
## Choi 2018 0.5780 [ 0.1021; 3.2011]
## Gibbs 2004 0.0000 [ 0.0000; 14.8655]
## Gondar 2016 0.8152 [ 0.2776; 2.3691]
## Guresir 2013 0.7812 [ 0.2660; 2.2715]
## Irazabal 2011 0.0000 [ 0.0000; 8.2010]
## Jeon 2014 0.3521 [ 0.0966; 1.2746]
## Jiang 2013 0.0000 [ 0.0000; 8.7622]
## Juvela 2013 20.6612 [14.4047; 28.7232]
## Matsubara 2004 0.0000 [ 0.0000; 2.9815]
## Matsumoto 2013 0.8850 [ 0.1564; 4.8431]
## Mizoi 1995 0.0000 [ 0.0000; 15.4639]
## Morita 2012 1.2933 [ 0.9397; 1.7774]
## Murayama 2016 2.0679 [ 1.5164; 2.8142]
## Oh 2013 0.0000 [ 0.0000; 21.5311]
## Serrone 2016 0.0000 [ 0.0000; 1.9417]
## So 2010 0.4695 [ 0.0829; 2.6110]
## Sonobe 2010 1.5625 [ 0.7589; 3.1897]
## Teo 2016 2.3810 [ 0.8130; 6.7666]
## Thien 2017 0.0000 [ 0.0000; 2.5637]
## Tsukahara 2005 1.8692 [ 0.5141; 6.5604]
## Tsutsumi 2000 4.0816 [ 1.1266; 13.7130]
## Villablanca 2013 1.5544 [ 0.5300; 4.4697]
## Wiebers-P 2003 0.8580 [ 0.4520; 1.6225]
## Wilkinson 2018 0.0000 [ 0.0000; 16.1125]
## Zylkowski 2015 2.7273 [ 0.9318; 7.7131]
##
## Number of studies combined: k = 28
##
## events 95%-CI
## Fixed effect model 1.4863 [1.2717; 1.7364]
## Random effects model 1.0127 [0.6108; 1.6746]
##
## Quantifying heterogeneity:
## tau^2 = 0.9810; tau = 0.9904; I^2 = 82.6%; H = 2.39
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 163.19 27 < 0.0001 Wald-type
## 137.92 27 < 0.0001 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
## (only used to calculate individual study results)
## - Events per 100 observations
Here we can see that the I^2 = 82.6% within the sub-group, which means that there remains high between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, we cannot accurately predict the rupture risk in the population.
forest(pes.summary.glmm7,
layout = "meta",
comb.fixed = FALSE,
comb.random = TRUE,
leftlabs = c("Study", "Ruptures", "Total"),
rightcols = c("effect", "ci"),
rightlabs = c("Ruptures per 100", "95% CI"),
smlab = " ",
xlim=c(0,10),
xlab = "Rupture Proportion per 100",
pooled.events = TRUE,
)
sizedata5 <- filter(maindata, size == 5)
Assumptions:
dat5 <- sizedata5 %>%
mutate(total_size = coalesce(num_anr,num)) %>%
drop_na(total_size) %>%
drop_na(rupt) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
select(auth_year, rupt, total_size)
pes.summary.glmm5 = metaprop(rupt, total_size,
data=dat5,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
pes.summary.glmm5
## events 95%-CI
## Bor 2015 0.7435 [ 0.2041; 2.6699]
## Broderick 2009 1.3889 [ 0.2456; 7.4566]
## Gibbs 2004 0.0000 [ 0.0000; 16.8179]
## Gondar 2016 0.9091 [ 0.3096; 2.6383]
## Guresir 2013 1.0563 [ 0.3599; 3.0592]
## Irazabal 2011 0.0000 [ 0.0000; 10.1515]
## Jeon 2014 0.3521 [ 0.0966; 1.2746]
## Jiang 2013 0.0000 [ 0.0000; 16.8179]
## Juvela 2013 20.5607 [13.9884; 29.1736]
## Matsubara 2004 0.0000 [ 0.0000; 2.9815]
## Matsumoto 2013 1.2658 [ 0.2238; 6.8276]
## Mizoi 1995 0.0000 [ 0.0000; 15.4639]
## Morita 2012 1.1500 [ 0.7675; 1.7198]
## Murayama 2016 1.2813 [ 0.8477; 1.9325]
## Oh 2013 0.0000 [ 0.0000; 22.8095]
## Serrone 2016 0.0000 [ 0.0000; 7.4100]
## So 2010 0.4695 [ 0.0829; 2.6110]
## Sonobe 2010 1.5625 [ 0.7589; 3.1897]
## Thien 2017 0.0000 [ 0.0000; 2.5637]
## Tsukahara 2005 1.8692 [ 0.5141; 6.5604]
## Tsutsumi 2000 4.0816 [ 1.1266; 13.7130]
## Wilkinson 2018 0.0000 [ 0.0000; 16.8179]
## Zylkowski 2015 2.1739 [ 0.5982; 7.5835]
##
## Number of studies combined: k = 23
##
## events 95%-CI
## Fixed effect model 1.3719 [1.1208; 1.6782]
## Random effects model 0.9570 [0.5081; 1.7954]
##
## Quantifying heterogeneity:
## tau^2 = 1.1330; tau = 1.0644; I^2 = 79.8%; H = 2.23
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 138.63 22 < 0.0001 Wald-type
## 107.57 22 < 0.0001 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
## (only used to calculate individual study results)
## - Events per 100 observations
Here we can see that the I^2 = 79.8% within the sub-group, which means that there remains high between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, we cannot accurately predict the rupture risk in the population.
forest(pes.summary.glmm5,
layout = "meta",
comb.fixed = FALSE,
comb.random = TRUE,
leftlabs = c("Study", "Ruptures", "Total"),
rightcols = c("effect", "ci"),
rightlabs = c("Ruptures per 100", "95% CI"),
smlab = " ",
xlim=c(0,10),
xlab = "Rupture Proportion per 100",
pooled.events = TRUE,
)
sizedata3 <- filter(maindata, size == 3)
Assumptions:
dat3 <- sizedata3 %>%
mutate(total_size = coalesce(num_anr,num)) %>%
drop_na(total_size) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
select(auth_year, rupt, total_size)
pes.summary.glmm3 = metaprop(rupt, total_size,
data=dat3,
studlab=paste(auth_year),
method="GLMM",
control=list(stepadj=0.5,maxiter=1000),
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
pes.summary.glmm3
## events 95%-CI
## Bor 2015 3.0303 [ 0.5369; 15.3187]
## Broderick 2009 1.3889 [ 0.2456; 7.4566]
## Gibbs 2004 0.0000 [ 0.0000; 24.2494]
## Gondar 2016 0.5376 [ 0.0950; 2.9821]
## Guresir 2013 1.6000 [ 0.4399; 5.6463]
## Irazabal 2011 0.0000 [ 0.0000; 15.4639]
## Jiang 2013 0.0000 [ 0.0000; 16.8179]
## Juvela 2013 29.4118 [18.7087; 42.9991]
## Matsumoto 2013 0.0000 [ 0.0000; 4.6371]
## Mizoi 1995 0.0000 [ 0.0000; 15.4639]
## Oh 2013 0.0000 [ 0.0000; 56.1497]
## Serrone 2016 0.0000 [ 0.0000; 7.4100]
## So 2010 1.6393 [ 0.2900; 8.7189]
## Sonobe 2010 1.6129 [ 0.4434; 5.6903]
## Wilkinson 2018 0.0000 [ 0.0000; 17.5879]
## Zylkowski 2015 0.0000 [ 0.0000; 11.6970]
##
## Number of studies combined: k = 16
##
## events 95%-CI
## Fixed effect model 2.5499 [1.7002; 3.8078]
## Random effects model 0.8377 [0.2373; 2.9129]
##
## Quantifying heterogeneity:
## tau^2 = 2.3385; tau = 1.5292; I^2 = 72.9%; H = 1.92
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 51.21 15 < 0.0001 Wald-type
## 69.26 15 < 0.0001 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
## (only used to calculate individual study results)
## - Events per 100 observations
Here we can see that the I^2 = 72.9% within the sub-group, which means that there remains high between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, we cannot accurately predict the rupture risk in the population.
Note that the Fisher scoring algorith failed to converge to calculate the tau2 using the maximum-likelihood estimator after the default 100 iterations; this also fails after attempting 1000 iterations. This was be corrected by reducing the step length, and the model converges.
Another option to consider is usting a penalised maximum likelihood estimation using the Firth method. The penalisation allows for convergence to finite estimates even with very sparse data.
forest(pes.summary.glmm3,
layout = "meta",
comb.fixed = FALSE,
comb.random = TRUE,
leftlabs = c("Study", "Ruptures", "Total"),
rightcols = c("effect", "ci"),
rightlabs = c("Ruptures per 100", "95% CI"),
smlab = " ",
xlim=c(0,10),
xlab = "Rupture Proportion per 100",
pooled.events = TRUE,
)
Firstly structure the data in individual studies with authors in a 2 x 2 table
ai = prior SAH and rupture +ve = variable rupt_psah bi = prior SAH and rupture -ve ci = no prior SAH and rupture +ve = rupt minus rupt_psah di = no prior SAH, and rupture -ve
n1i = ai + bi = total aneurysms with prior SAH n2i = ci + di = total aneurysms without prior SAH
n1i + n2i = total_anr included with and without prior SAH
total number of events = total number of ruptures = variable rupt
assumptions: if number of aneurysms in the size criteria are not reported, number of patients are carried forward, assuming 1 patient has 1 aneurysm. If the number of patients with prior is SAH is known, this is utilised as n1i.
If the patients of patients with prior is SAH is unknown, then the proportion of patients with prior SAH in the total observation cohort of all aneurysms is carried forward and applied to the number of aneurysms, and an estimated number of patients with prior SAH calculated based on the total observation cohort.
Data analysis is limited to studies in which there are known values of ai, bi, ci, and di. If there are NAs in the 2 x 2 table, then that study is excluded.
dat.psah <- sizedata %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
mutate(total_anr = coalesce(num_anr,num)) %>%
drop_na(total_anr) %>%
rename(ai = rupt_psah) %>%
rename(rupt.total = rupt) %>%
mutate(ci = rupt.total - ai) %>%
rename(n1i.temp = psah) %>%
mutate(prop = psah_tot / num_tot) %>%
mutate(num_anr_psah = prop * total_anr) %>%
mutate(n1i = coalesce(n1i.temp,num_anr_psah)) %>%
mutate(n2i = total_anr - n1i) %>%
mutate(bi = n1i - ai) %>%
mutate(di = n2i - ci) %>%
select(auth_year, ai, bi, ci, di, n1i, n2i) %>%
drop_na(ai, bi, ci, di) %>%
mutate_if(is.numeric, round, 0)
then create new tibble for patients with and without history of prior subarachnoid haemorrhage.
dat.psahpos <- dat.psah %>%
filter(n1i!=0)
dat.psahneg <- dat.psah %>%
filter(n2i!=0)
run new GLMM (random intercept logistic regression model) for patients with prior history of subaarachnoid haemorrhage. Studies that did not include any patients with prior history of subarachnoid haemorrage are excluded.
pes.summary.psahpos = metaprop(ai, n1i,
data=dat.psahpos,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
pes.summary.psahpos
## events 95%-CI
## Gondar 2016 4.7619 [ 0.8456; 22.6694]
## Juvela 2013 23.2558 [16.8036; 31.2548]
## Matsubara 2004 0.0000 [ 0.0000; 39.0334]
## Mizoi 1995 0.0000 [ 0.0000; 65.7620]
## Serrone 2016 0.0000 [ 0.0000; 65.7620]
## Sonobe 2010 2.7778 [ 0.4920; 14.1697]
## Teo 2016 0.0000 [ 0.0000; 8.3799]
## Tsukahara 2005 0.0000 [ 0.0000; 11.3513]
## Wiebers-R 1998 2.6521 [ 1.6623; 4.2060]
## Wilkinson 2018 0.0000 [ 0.0000; 56.1497]
## Zylkowski 2015 4.5455 [ 0.8069; 21.7980]
##
## Number of studies combined: k = 11
##
## events 95%-CI
## Fixed effect model 5.3533 [4.0803; 6.9946]
## Random effects model 2.7228 [0.8087; 8.7663]
##
## Quantifying heterogeneity:
## tau^2 = 1.4325; tau = 1.1969; I^2 = 79.6%; H = 2.22
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 58.74 10 < 0.0001 Wald-type
## 67.82 10 < 0.0001 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
## (only used to calculate individual study results)
## - Events per 100 observations
Here we can see that the I^2 = 79.6% within the sub-group, which means that there remains high between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, we cannot accurately predict the rupture risk in the population. In addition, the confidence intervals are wide, and driven primarily by 2 studies.
forest(pes.summary.psahpos,
layout = "meta",
comb.fixed = FALSE,
comb.random = TRUE,
leftlabs = c("Study", "Ruptures", "Total"),
rightcols = c("effect", "ci"),
rightlabs = c("Ruptures per 100", "95% CI"),
smlab = " ",
xlim=c(0,30),
xlab = "Rupture Proportion per 100",
pooled.events = TRUE,
)
Then run new GLMM (random intercept logistic regression model) for patients without history of PSAH
pes.summary.psahneg = metaprop(ci, n2i,
data=dat.psahneg,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
pes.summary.psahneg
## events 95%-CI
## Broderick 2009 1.8519 [0.5093; 6.5019]
## Gibbs 2004 0.0000 [0.0000; 14.8655]
## Gondar 2016 0.5764 [0.1582; 2.0768]
## Guresir 2013 0.7812 [0.2660; 2.2715]
## Irazabal 2011 0.0000 [0.0000; 7.8652]
## Jeon 2014 0.3521 [0.0966; 1.2746]
## Jiang 2013 0.0000 [0.0000; 7.1348]
## Juvela 2013 16.6667 [3.0053; 56.3503]
## Loumiotis 2011 0.0000 [0.0000; 2.3446]
## Matsubara 2004 0.0000 [0.0000; 2.4650]
## Mizoi 1995 0.0000 [0.0000; 16.8179]
## Oh 2013 0.0000 [0.0000; 16.8179]
## Serrone 2016 0.5208 [0.0920; 2.8907]
## Sonobe 2010 1.4563 [0.6691; 3.1404]
## Teo 2016 3.5714 [1.2220; 9.9817]
## Thien 2017 0.6173 [0.1090; 3.4133]
## Tsukahara 2005 4.3860 [1.8878; 9.8581]
## Tsutsumi 2000 5.3571 [1.8386; 14.6073]
## Wiebers-R 1998 0.2358 [0.0416; 1.3237]
## Wilkinson 2018 0.0000 [0.0000; 16.8179]
## Zylkowski 2015 2.2727 [0.6255; 7.9125]
##
## Number of studies combined: k = 21
##
## events 95%-CI
## Fixed effect model 0.9327 [0.6603; 1.3159]
## Random effects model 0.8594 [0.4770; 1.5437]
##
## Quantifying heterogeneity:
## tau^2 = 0.7093; tau = 0.8422; I^2 = 53.2%; H = 1.46
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 31.20 20 0.0526 Wald-type
## 40.42 20 0.0044 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
## (only used to calculate individual study results)
## - Events per 100 observations
Here we can see that the I^2 = 53.2% within the sub-group, which means that there remains moderate between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, althought it is reduced from other subgroups, we still cannot accurately predict the rupture risk in the population.
forest(pes.summary.psahneg,
layout = "meta",
comb.fixed = FALSE,
comb.random = TRUE,
leftlabs = c("Study", "Ruptures", "Total"),
rightcols = c("effect", "ci"),
rightlabs = c("Ruptures per 100", "95% CI"),
smlab = " ",
xlim=c(0,10),
xlab = "Rupture Proportion per 100",
pooled.events = TRUE,
)
A clinical hypothesis to explore is that the proportion of patients that rupture may be associated with the length of follow up in the study.
This exploratory analysis considers the proportion of ruptures that occur in studies with intermediate length of follow up defined as 5 years or less, and long term follow up defined as more than 5 years. 5 Years is chosen as it is a relatively common measure for patient level discussions about risk vs benefit across a number of fields of medicine.
dat.fu <- sizedata %>%
mutate(fu = coalesce(fu_mean_tot,fu_med_tot)) %>%
mutate(total_size = coalesce(num_anr,num)) %>%
drop_na(total_size) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
select(auth_year, rupt, total_size, fu)
Now that the column with length of follow up is created, we can perform a subgroup meta-analysis of studies with intermediate and long term follow up.
dat.fu.int <- dat.fu %>%
filter(fu < 60)
pes.summary.glmmint = metaprop(rupt, total_size,
data=dat.fu.int,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
pes.summary.glmmint
## events 95%-CI
## Bor 2015 0.7444 [0.2535; 2.1655]
## Burns 2009 0.5780 [0.1021; 3.2011]
## Byoun 2016 1.7628 [0.9871; 3.1288]
## Gondar 2016 0.8152 [0.2776; 2.3691]
## Guresir 2013 0.7812 [0.2660; 2.2715]
## Jeon 2014 0.3521 [0.0966; 1.2746]
## Jiang 2013 0.0000 [0.0000; 7.1348]
## Loumiotis 2011 0.0000 [0.0000; 2.3446]
## Matsubara 2004 0.0000 [0.0000; 2.3736]
## Mizoi 1995 0.0000 [0.0000; 15.4639]
## Morita 2012 1.8658 [1.4582; 2.3845]
## Murayama 2016 2.2384 [1.6660; 3.0014]
## Oh 2013 0.0000 [0.0000; 16.8179]
## Serrone 2016 0.5155 [0.0911; 2.8615]
## So 2010 1.1450 [0.3902; 3.3118]
## Sonobe 2010 1.5625 [0.7589; 3.1897]
## Teo 2016 2.3810 [0.8130; 6.7666]
## Thien 2017 0.6173 [0.1090; 3.4133]
## Tsutsumi 2000 5.3571 [1.8386; 14.6073]
## Villablanca 2013 1.5544 [0.5300; 4.4697]
## Zylkowski 2015 2.7273 [0.9318; 7.7131]
##
## Number of studies combined: k = 21
##
## events 95%-CI
## Fixed effect model 1.5633 [1.3349; 1.8300]
## Random effects model 1.1643 [0.8122; 1.6665]
##
## Quantifying heterogeneity:
## tau^2 = 0.1944; tau = 0.4409; I^2 = 52.5%; H = 1.45
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 23.26 20 0.2764 Wald-type
## 42.78 20 0.0022 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
## (only used to calculate individual study results)
## - Events per 100 observations
Here we can see that the I^2 = 52.5% within the sub-group, which means that there remains moderate between-study variation, even within the subgroup. In other words, even if the study falls within this subgroup, althought it is reduced from other subgroups, we still cannot accurately predict the rupture risk in the population.
forest(pes.summary.glmmint,
layout = "meta",
comb.fixed = FALSE,
comb.random = TRUE,
leftlabs = c("Study", "Ruptures", "Total"),
rightcols = c("effect", "ci"),
rightlabs = c("Ruptures per 100", "95% CI"),
smlab = " ",
xlim=c(0,10),
xlab = "Rupture Proportion per 100",
pooled.events = TRUE,
)
dat.fu.long <- dat.fu %>%
filter(fu > 60)
pes.summary.glmmlong = metaprop(rupt, total_size,
data=dat.fu.long,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
pes.summary.glmmlong
## events 95%-CI
## Choi 2018 0.5780 [ 0.1021; 3.2011]
## Gibbs 2004 0.0000 [ 0.0000; 14.8655]
## Irazabal 2011 0.0000 [ 0.0000; 7.8652]
## Juvela 2013 22.9630 [16.6751; 30.7469]
## Wiebers-R 1998 1.6901 [ 1.0717; 2.6558]
## Wilkinson 2018 0.0000 [ 0.0000; 14.8655]
##
## Number of studies combined: k = 6
##
## events 95%-CI
## Fixed effect model 3.4200 [2.6014; 4.4843]
## Random effects model 1.0762 [0.1234; 8.7415]
##
## Quantifying heterogeneity:
## tau^2 = 3.6011; tau = 1.8976; I^2 = 94.5%; H = 4.27
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 89.93 5 < 0.0001 Wald-type
## 95.45 5 < 0.0001 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
## (only used to calculate individual study results)
## - Events per 100 observations
Here we can see that the I^2 = 94.5% within the sub-group, which means that there is high between-study variation, even within the subgroup. In other words, if the study falls within this subgroup, we cannot accurately predict the rupture risk in the population. Moreover, there are very few studies in this subgroup and the effect is driven mainly by 1 study.
forest(pes.summary.glmmlong,
layout = "meta",
comb.fixed = FALSE,
comb.random = TRUE,
leftlabs = c("Study", "Ruptures", "Total"),
rightcols = c("effect", "ci"),
rightlabs = c("Ruptures per 100", "95% CI"),
smlab = " ",
xlim=c(0,10),
xlab = "Rupture Proportion per 100",
pooled.events = TRUE,
)
The data for risk of rupture beyond 5 years is extremely sparse, and quite imprecise. Pooling is not considered appropriate, and forest plots are not required. The results will be described qualitatively.
It is noted however, that the result in the long term follow up subgroup may be due to mainly patients with prior history of SAH and long term follow up. Explore this by examining only patients with prior SAH and long term follow up.
dat.psah.fu <- sizedata %>%
mutate(fu = coalesce(fu_mean_tot,fu_med_tot)) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
mutate(total_anr = coalesce(num_anr,num)) %>%
drop_na(total_anr) %>%
rename(ai = rupt_psah) %>%
rename(rupt.total = rupt) %>%
mutate(ci = rupt.total - ai) %>%
rename(n1i.temp = psah) %>%
mutate(prop = psah_tot / num_tot) %>%
mutate(num_anr_psah = prop * total_anr) %>%
mutate(n1i = coalesce(n1i.temp,num_anr_psah)) %>%
mutate(n2i = total_anr - n1i) %>%
mutate(bi = n1i - ai) %>%
mutate(di = n2i - ci) %>%
select(auth_year, ai, bi, ci, di, n1i, n2i, fu) %>%
drop_na(ai, bi, ci, di) %>%
mutate_if(is.numeric, round, 0)
How about patients with intermediate follow up?
dat.psah.fu.int <- dat.psah.fu %>%
filter(fu < 60)
How about patients with long term follow up?
dat.psah.fu.long <- dat.psah.fu %>%
filter(fu > 60)
Examine dat.psah.fu.long and review ai and ci.
ci = patients without prior history of SAH who were included in studies with greater than 5 years of follow up who susbsequently ruptured.
See that only 2 patients without history of prior SAH ruptured on long term follow up. Although the data are sparse, there is minimal extractable data on the outcomes of unruptured aneurysms beyond 5 years.
Exploratory meta-regression to explore length of follow up on rupture outcomes, including all studies
dat.fu.metareg <- sizedata %>%
mutate(fu = coalesce(fu_mean_tot,fu_med_tot)/12) %>%
mutate(total_size = coalesce(num_anr,num)) %>%
drop_na(total_size) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
select(auth_year, rupt, total_size, fu) %>%
drop_na(fu)
fu.metareg = metaprop(rupt, total_size,
data=dat.fu.metareg,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
fu.metareg.result <- metareg(fu.metareg, ~fu)
fu.metareg.result
##
## Mixed-Effects Model (k = 27; tau^2 estimator: ML)
##
## tau^2 (estimated amount of residual heterogeneity): 0.2351
## tau (square root of estimated tau^2 value): 0.4849
## I^2 (residual heterogeneity / unaccounted variability): 55.8468%
## H^2 (unaccounted variability / sampling variability): 2.2648
##
## Tests for Residual Heterogeneity:
## Wld(df = 25) = 39.7804, p-val = 0.0307
## LRT(df = 25) = 65.9598, p-val < .0001
##
## Test of Moderators (coefficient 2):
## QM(df = 1) = 31.6461, p-val < .0001
##
## Model Results:
##
## estimate se zval pval ci.lb ci.ub
## intrcpt -5.0211 0.2275 -22.0670 <.0001 -5.4670 -4.5751 ***
## fu 0.1654 0.0294 5.6255 <.0001 0.1078 0.2230 ***
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(fu.metareg.result, studlab=dat.fu.metareg$auth_year, xlim=c(0, 25), main="Bubble plot")
Overall, the metaregression result reveals the following
estimate 0.1654 (95% CI 0.1078 - 0.2230) p value <.0001
This means that for every 1-unit increase in the covariate fu, thre is a 0.17 increase in the dependent variable which is the logit transformed proportion. The p value is significant, which rejects the null hypothesis that there is no association between the covariate fu and the dependent variable.
This suggests that study median follow up duration is associated with pooled rupture risk, however, the I2 = 55.8 meaning that there remains moderate between-study variance around the regression line.
dat.fu.metareg.juvela <- sizedata %>%
slice(-12) %>%
mutate(fu = coalesce(fu_mean_tot,fu_med_tot)/12) %>%
mutate(total_size = coalesce(num_anr,num)) %>%
drop_na(total_size) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
select(auth_year, rupt, total_size, fu) %>%
drop_na(fu)
fu.metareg.juvela = metaprop(rupt, total_size,
data=dat.fu.metareg.juvela,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
fu.metareg.result.juvela <- metareg(fu.metareg.juvela, ~fu)
fu.metareg.result.juvela
##
## Mixed-Effects Model (k = 26; tau^2 estimator: ML)
##
## tau^2 (estimated amount of residual heterogeneity): 0.1648
## tau (square root of estimated tau^2 value): 0.4060
## I^2 (residual heterogeneity / unaccounted variability): 43.2183%
## H^2 (unaccounted variability / sampling variability): 1.7611
##
## Tests for Residual Heterogeneity:
## Wld(df = 24) = 24.5949, p-val = 0.4280
## LRT(df = 24) = 47.1112, p-val = 0.0032
##
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.1871, p-val = 0.6653
##
## Model Results:
##
## estimate se zval pval ci.lb ci.ub
## intrcpt -4.5394 0.3096 -14.6630 <.0001 -5.1462 -3.9326 ***
## fu 0.0314 0.0726 0.4326 0.6653 -0.1108 0.1736
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(fu.metareg.result.juvela, studlab=dat.fu.metareg.juvela$auth_year, xlim=c(0, 10), main="Bubble plot")
Once Juvela is excluded, there is no evidence that median follow up per study is associated with rupture risk.
We can analyse whether there is a relationship between the proportion of patients with prior SAH included in the study (potential effect modifier), and the the outcome (rupture proportion).
The choice of this potential effect modifier is:
Since we are analysing at a study level, and we do not know the characteristics of individual patients, this is an exploratory and hypothesis generating analysis.
Note that
ai = prior SAH and rupture +ve = variable rupt_psah bi = prior SAH and rupture -ve ci = no prior SAH and rupture +ve = rupt minus rupt_psah di = no prior SAH, and rupture -ve
n1i = ai + bi = total aneurysms with prior SAH n2i = ci + di = total aneurysms without prior SAH
n1i + n2i = total_anr included with and without prior SAH
total number of events = total number of ruptures = variable rupt
dat.psah.metareg <- sizedata %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
mutate(total_anr = coalesce(num_anr,num)) %>%
drop_na(total_anr) %>%
rename(ai = rupt_psah) %>%
rename(rupt.total = rupt) %>%
mutate(ci = rupt.total - ai) %>%
rename(n1i.temp = psah) %>%
mutate(prop = psah_tot / num_tot) %>%
mutate(num_anr_psah = prop * total_anr) %>%
mutate(n1i = coalesce(n1i.temp,num_anr_psah)) %>%
mutate(n2i = total_anr - n1i) %>%
mutate(bi = n1i - ai) %>%
mutate(di = n2i - ci) %>%
select(auth_year, rupt.total, total_anr, prop)
psah.metareg = metaprop(rupt.total, total_anr,
data=dat.psah.metareg,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
psah.metareg.result <- metareg(psah.metareg, ~prop)
## Warning in rma.glmm(xi = event[!exclude], ni = n[!exclude], data = dataset, :
## Studies with NAs omitted from model fitting.
## Warning in rma.glmm(xi = event[!exclude], ni = n[!exclude], data = dataset, :
## Some yi/vi values are NA.
psah.metareg.result
##
## Mixed-Effects Model (k = 28; tau^2 estimator: ML)
##
## tau^2 (estimated amount of residual heterogeneity): 0.3734
## tau (square root of estimated tau^2 value): 0.6111
## I^2 (residual heterogeneity / unaccounted variability): 65.1394%
## H^2 (unaccounted variability / sampling variability): 2.8686
##
## Tests for Residual Heterogeneity:
## Wld(df = 26) = 66.6007, p-val < .0001
## LRT(df = 26) = 93.2441, p-val < .0001
##
## Test of Moderators (coefficient 2):
## QM(df = 1) = 21.6652, p-val < .0001
##
## Model Results:
##
## estimate se zval pval ci.lb ci.ub
## intrcpt -4.8492 0.2328 -20.8277 <.0001 -5.3056 -4.3929 ***
## prop 3.2544 0.6992 4.6546 <.0001 1.8840 4.6247 ***
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(psah.metareg.result, studlab=dat.psah.metareg$auth_year, xlim=c(0, 1), main="Meta-regression plot for prior SAH")
dat.psah.metareg.juvela <- sizedata %>%
slice(-12) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
mutate(total_anr = coalesce(num_anr,num)) %>%
drop_na(total_anr) %>%
rename(ai = rupt_psah) %>%
rename(rupt.total = rupt) %>%
mutate(ci = rupt.total - ai) %>%
rename(n1i.temp = psah) %>%
mutate(prop = psah_tot / num_tot) %>%
mutate(num_anr_psah = prop * total_anr) %>%
mutate(n1i = coalesce(n1i.temp,num_anr_psah)) %>%
mutate(n2i = total_anr - n1i) %>%
mutate(bi = n1i - ai) %>%
mutate(di = n2i - ci) %>%
select(auth_year, rupt.total, total_anr, prop)
psah.metareg.juvela = metaprop(rupt.total, total_anr,
data=dat.psah.metareg.juvela,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
psah.metareg.result.juvela <- metareg(psah.metareg.juvela, ~prop)
## Warning in rma.glmm(xi = event[!exclude], ni = n[!exclude], data = dataset, :
## Studies with NAs omitted from model fitting.
## Warning in rma.glmm(xi = event[!exclude], ni = n[!exclude], data = dataset, :
## Some yi/vi values are NA.
psah.metareg.result.juvela
##
## Mixed-Effects Model (k = 27; tau^2 estimator: ML)
##
## tau^2 (estimated amount of residual heterogeneity): 0.2152
## tau (square root of estimated tau^2 value): 0.4639
## I^2 (residual heterogeneity / unaccounted variability): 49.0587%
## H^2 (unaccounted variability / sampling variability): 1.9630
##
## Tests for Residual Heterogeneity:
## Wld(df = 25) = 27.0668, p-val = 0.3526
## LRT(df = 25) = 50.1671, p-val = 0.0020
##
## Test of Moderators (coefficient 2):
## QM(df = 1) = 1.4687, p-val = 0.2256
##
## Model Results:
##
## estimate se zval pval ci.lb ci.ub
## intrcpt -4.5766 0.2382 -19.2115 <.0001 -5.0435 -4.1097 ***
## prop 1.2824 1.0582 1.2119 0.2256 -0.7916 3.3565
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(psah.metareg.result.juvela, studlab=dat.psah.metareg.juvela$auth_year, xlim=c(0, 1), main="Meta-regression plot for prior SAH excluding Juvela")
Once Juvela is excluded, there is no evidence that proportion fo patients with prior SAH per study is associated with rupture risk.
We can analyse whether there is a relationship between the proportion of patients with aneurysms measuring 5mm and less included in the study (potential effect modifier), and the the outcome (rupture proportion).
The choice of this potential effect modifier is:
Since we are analysing at a study level, and we do not know the aneurysm characteristics of individual patients, this is an exploratory and hypothesis generating analysis.
sizedata10 <- filter(maindata, size == 10)
dat10.metareg <- sizedata10 %>%
mutate(total_size10 = coalesce(num_anr,num)) %>%
drop_na(total_size10) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
select(auth_year, rupt, total_size10) %>%
rename(rupt10 = rupt)
dat5.metareg <- dat5 %>%
rename(rupt5 = rupt) %>%
rename(total_size5 = total_size)
dat.size5.metareg <- left_join(dat5.metareg, dat10.metareg) %>%
mutate(prop_size5 = total_size5 / total_size10)
## Joining, by = "auth_year"
size5.metareg = metaprop(rupt10, total_size10,
data=dat.size5.metareg,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
size5mm.metareg.result <- metareg(size5.metareg, ~prop_size5)
size5mm.metareg.result
##
## Mixed-Effects Model (k = 23; tau^2 estimator: ML)
##
## tau^2 (estimated amount of residual heterogeneity): 1.1297
## tau (square root of estimated tau^2 value): 1.0629
## I^2 (residual heterogeneity / unaccounted variability): 83.6017%
## H^2 (unaccounted variability / sampling variability): 6.0982
##
## Tests for Residual Heterogeneity:
## Wld(df = 21) = 175.6836, p-val < .0001
## LRT(df = 21) = 149.6619, p-val < .0001
##
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.1901, p-val = 0.6628
##
## Model Results:
##
## estimate se zval pval ci.lb ci.ub
## intrcpt -4.9462 1.3400 -3.6911 0.0002 -7.5726 -2.3198 ***
## prop_size5 0.7298 1.6739 0.4360 0.6628 -2.5509 4.0105
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
There is no evidence that the pooled rupture risk varied by the proportion of patients with aneursysms 5mm and less included in the studies (P=.66)
bubble(size5mm.metareg.result, studlab=dat.size5.metareg$auth_year, xlim=c(0, 1), main="Meta-regression plot for 5mm Aneurysm size")
sizedata10 <- filter(maindata, size == 10)
dat10.metareg <- sizedata10 %>%
mutate(total_size10 = coalesce(num_anr,num)) %>%
drop_na(total_size10) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
select(auth_year, rupt, total_size10) %>%
rename(rupt10 = rupt)
dat3.metareg <- dat3 %>%
rename(rupt3 = rupt) %>%
rename(total_size3 = total_size)
dat.size3.metareg <- left_join(dat3.metareg, dat10.metareg) %>%
mutate(prop_size3 = total_size3 / total_size10)
## Joining, by = "auth_year"
size3.metareg = metaprop(rupt10, total_size10,
data=dat.size3.metareg,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
size3mm.metareg.result <- metareg(size3.metareg, ~prop_size3)
size3mm.metareg.result
##
## Mixed-Effects Model (k = 16; tau^2 estimator: ML)
##
## tau^2 (estimated amount of residual heterogeneity): 1.3407
## tau (square root of estimated tau^2 value): 1.1579
## I^2 (residual heterogeneity / unaccounted variability): 79.1330%
## H^2 (unaccounted variability / sampling variability): 4.7923
##
## Tests for Residual Heterogeneity:
## Wld(df = 14) = 125.5504, p-val < .0001
## LRT(df = 14) = 122.8878, p-val < .0001
##
## Test of Moderators (coefficient 2):
## QM(df = 1) = 0.0086, p-val = 0.9263
##
## Model Results:
##
## estimate se zval pval ci.lb ci.ub
## intrcpt -4.3808 0.7994 -5.4800 <.0001 -5.9477 -2.8140 ***
## prop_size3 -0.1677 1.8130 -0.0925 0.9263 -3.7212 3.3858
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
There is no evidence that the pooled rupture risk varied by the proportion of patients with aneursysms 3mm and less included in the studies (P=.92)
bubble(size3mm.metareg.result, studlab=dat.size3.metareg$auth_year, xlim=c(0, 1), main="Meta-regression plot for 3mm Aneurysm size")
We can analyse whether there is a relationship between the year the last patient was included in the study (potential effect modifier), and the the outcome (rupture proportion).
The choice of this potential effect modifier is:
Since we are analysing at a study level, this is an exploratory and hypothesis generating analysis.
dat.year.metareg <- sizedata %>%
mutate(total_size = coalesce(num_anr,num)) %>%
drop_na(total_size) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
select(auth_year, end, rupt, total_size) %>%
drop_na(end)
year.metareg = metaprop(rupt, total_size,
data=dat.year.metareg,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
year.metareg.result <- metareg(year.metareg, ~end)
year.metareg.result
##
## Mixed-Effects Model (k = 26; tau^2 estimator: ML)
##
## tau^2 (estimated amount of residual heterogeneity): 0.2869
## tau (square root of estimated tau^2 value): 0.5356
## I^2 (residual heterogeneity / unaccounted variability): 62.4019%
## H^2 (unaccounted variability / sampling variability): 2.6597
##
## Tests for Residual Heterogeneity:
## Wld(df = 24) = 67.2656, p-val < .0001
## LRT(df = 24) = 85.0110, p-val < .0001
##
## Test of Moderators (coefficient 2):
## QM(df = 1) = 26.6583, p-val < .0001
##
## Model Results:
##
## estimate se zval pval ci.lb ci.ub
## intrcpt 166.5112 33.0397 5.0397 <.0001 101.7546 231.2678 ***
## end -0.0851 0.0165 -5.1632 <.0001 -0.1175 -0.0528 ***
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(year.metareg.result, studlab=dat.year.metareg$auth_year, xlim=c(1960, 2020), main="Meta-regression plot for Study End Year")
This plot suggests that there is an association between end of study year and rupture risk of aneurysms.
We can repeat this excluding Juvela.
dat.year.metareg.juvela <- sizedata %>%
slice(-12) %>%
mutate(total_size = coalesce(num_anr,num)) %>%
drop_na(total_size) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
select(auth_year, end, rupt, total_size) %>%
drop_na(end)
year.metareg.juvela = metaprop(rupt, total_size,
data=dat.year.metareg.juvela,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
year.metareg.result.juvela <- metareg(year.metareg.juvela, ~end)
year.metareg.result.juvela
##
## Mixed-Effects Model (k = 25; tau^2 estimator: ML)
##
## tau^2 (estimated amount of residual heterogeneity): 0.1377
## tau (square root of estimated tau^2 value): 0.3711
## I^2 (residual heterogeneity / unaccounted variability): 41.0342%
## H^2 (unaccounted variability / sampling variability): 1.6959
##
## Tests for Residual Heterogeneity:
## Wld(df = 23) = 24.4260, p-val = 0.3805
## LRT(df = 23) = 40.8728, p-val = 0.0122
##
## Test of Moderators (coefficient 2):
## QM(df = 1) = 2.6952, p-val = 0.1007
##
## Model Results:
##
## estimate se zval pval ci.lb ci.ub
## intrcpt 71.4488 46.1113 1.5495 0.1213 -18.9278 161.8253
## end -0.0378 0.0230 -1.6417 0.1007 -0.0828 0.0073
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bubble(year.metareg.result.juvela, studlab=dat.year.metareg.juvela$auth_year, xlim=c(1960, 2020), main="Meta-regression plot for Study End Year")
Once Juvela is excluded, then there is no evidence of an association between rupture risk and study end year.
In the previous scenarios we have considered the impact of a single study-level effect modifier on the outcome of rupture risk.
dat.psah.year.metareg <- sizedata %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
mutate(total_anr = coalesce(num_anr,num)) %>%
drop_na(total_anr) %>%
rename(ai = rupt_psah) %>%
rename(rupt.total = rupt) %>%
mutate(ci = rupt.total - ai) %>%
rename(n1i.temp = psah) %>%
mutate(prop = psah_tot / num_tot) %>%
mutate(num_anr_psah = prop * total_anr) %>%
mutate(n1i = coalesce(n1i.temp,num_anr_psah)) %>%
mutate(n2i = total_anr - n1i) %>%
mutate(bi = n1i - ai) %>%
mutate(di = n2i - ci) %>%
select(auth_year, rupt.total, total_anr, prop, end)
psah.year.metareg = metaprop(rupt.total, total_anr,
data=dat.psah.year.metareg,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
psah.year.metareg.result <- metareg(psah.year.metareg, ~ prop + end)
## Warning in rma.glmm(xi = event[!exclude], ni = n[!exclude], data = dataset, :
## Studies with NAs omitted from model fitting.
## Warning in rma.glmm(xi = event[!exclude], ni = n[!exclude], data = dataset, :
## Some yi/vi values are NA.
psah.year.metareg.result
##
## Mixed-Effects Model (k = 24; tau^2 estimator: ML)
##
## tau^2 (estimated amount of residual heterogeneity): 0.3194
## tau (square root of estimated tau^2 value): 0.5651
## I^2 (residual heterogeneity / unaccounted variability): 58.7915%
## H^2 (unaccounted variability / sampling variability): 2.4267
##
## Tests for Residual Heterogeneity:
## Wld(df = 21) = 58.5954, p-val < .0001
## LRT(df = 21) = 79.7854, p-val < .0001
##
## Test of Moderators (coefficients 2:3):
## QM(df = 2) = 25.6939, p-val < .0001
##
## Model Results:
##
## estimate se zval pval ci.lb ci.ub
## intrcpt 106.0048 70.7508 1.4983 0.1341 -32.6642 244.6739
## prop 1.4246 1.3481 1.0567 0.2906 -1.2176 4.0668
## end -0.0551 0.0352 -1.5654 0.1175 -0.1241 0.0139
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
This metaregression with both proportion of prior SAH patients in each study, and year of study end
bubble(psah.year.metareg.result, studlab=dat.psah.year.metareg$auth_year, xlim=c(0, 1), main="Meta-regression plot for prior SAH and Study End")
## Warning in bubble.metareg(psah.year.metareg.result, studlab =
## dat.psah.year.metareg$auth_year, : Only first covariate in meta-regression
## ('prop') considered in bubble plot. No regression line plotted.
Sensitivity analysis is used to assess the robustness of the result, and helps strengthed or weaken the conclusions that can be drawn from the meta-analysis.
If sensitivity analyses show that the overall result and conclusions are not affected by the different decisions that could be made during the review process, the results of the review can be regarded with a higher degree of certainty.
Similarly, if sensitivity analyses show that the overall result and conclusions are affected, the results should be interpreted with caution, and can be used to generate hypothesis for additional research.
Sensitivity analysis differs from subgroup analysis in that there is no assessment of the treatment effect in the removed studies, nor is there formal statistical assessment across the included and excluded studies. Instead, there is an informal comparison by recalculating the pooled effect size.
If there is heterogeniety, the random effect meta-analysis weights studies more equally. However, if there are marked small study effects, and only 1 high quality study, then this may not be reasonable. To synthesise the data, the author must make a decision whether this is appropriate. This can be done by comparing the results of the random and fixed effects meta-analysis.
pes.summary.glmm
## events 95%-CI
## Bor 2015 0.7444 [ 0.2535; 2.1655]
## Broderick 2009 1.8519 [ 0.5093; 6.5019]
## Burns 2009 0.5780 [ 0.1021; 3.2011]
## Byoun 2016 1.7628 [ 0.9871; 3.1288]
## Choi 2018 0.5780 [ 0.1021; 3.2011]
## Gibbs 2004 0.0000 [ 0.0000; 14.8655]
## Gondar 2016 0.8152 [ 0.2776; 2.3691]
## Guresir 2013 0.7812 [ 0.2660; 2.2715]
## Irazabal 2011 0.0000 [ 0.0000; 7.8652]
## Jeon 2014 0.3521 [ 0.0966; 1.2746]
## Jiang 2013 0.0000 [ 0.0000; 7.1348]
## Juvela 2013 22.9630 [16.6751; 30.7469]
## Loumiotis 2011 0.0000 [ 0.0000; 2.3446]
## Matsubara 2004 0.0000 [ 0.0000; 2.3736]
## Matsumoto 2013 2.6549 [ 0.9069; 7.5160]
## Mizoi 1995 0.0000 [ 0.0000; 15.4639]
## Morita 2012 1.8658 [ 1.4582; 2.3845]
## Murayama 2016 2.2384 [ 1.6660; 3.0014]
## Oh 2013 0.0000 [ 0.0000; 16.8179]
## Serrone 2016 0.5155 [ 0.0911; 2.8615]
## So 2010 1.1450 [ 0.3902; 3.3118]
## Sonobe 2010 1.5625 [ 0.7589; 3.1897]
## Teo 2016 2.3810 [ 0.8130; 6.7666]
## Thien 2017 0.6173 [ 0.1090; 3.4133]
## Tsukahara 2005 3.4722 [ 1.4921; 7.8703]
## Tsutsumi 2000 5.3571 [ 1.8386; 14.6073]
## Villablanca 2013 1.5544 [ 0.5300; 4.4697]
## Wiebers-R 1998 1.6901 [ 1.0717; 2.6558]
## Wilkinson 2018 0.0000 [ 0.0000; 14.8655]
## Zylkowski 2015 2.7273 [ 0.9318; 7.7131]
##
## Number of studies combined: k = 30
##
## events 95%-CI
## Fixed effect model 1.8355 [1.6061; 2.0970]
## Random effects model 1.2198 [0.7739; 1.9177]
##
## Quantifying heterogeneity:
## tau^2 = 0.9098; tau = 0.9538; I^2 = 84.4%; H = 2.54
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 189.86 29 < 0.0001 Wald-type
## 160.79 29 < 0.0001 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
## (only used to calculate individual study results)
## - Events per 100 observations
Here the results are not clinically significant with the overall same rupture proportion of 1-2% with either method. Moreover, in our case, a random effects meta-analysis is more appropriate due to existence of clinical and methodological heterogeneity. Regardless, other sources of heterogeneity still need to be explored.
Quality assessment was performed using the Newastle Ottowa Scale as recommended by Cochrane; this is also the most commonly utilised for observational studies.
This can be converted to the The Agency for Healthcare Research and Quality within the United States Department of Health and Human Services (AHRQ) standards using the following thresholds.
Good quality: 3 or 4 stars in selection domain AND 1 or 2 stars in comparability domain AND 2 or 3 stars in outcome/exposure domain
Fair quality: 2 stars in selection domain AND 1 or 2 stars in comparability domain AND 2 or 3 stars in outcome/exposure domain
Poor quality: 0 or 1 star in selection domain OR 0 stars in comparability domain OR 0 or 1 stars in outcome/exposure domain
dat.sens.nos <- sizedata %>%
filter(nos_select == 3 | nos_select == 4 ) %>%
filter(nos_compare == 1 | nos_compare == 2) %>%
filter(nos_outcome == 2 | nos_outcome == 3) %>%
mutate(ahrq = "Good")
dat.sens.nos <- dat.sens.nos %>%
mutate(total_size = coalesce(num_anr,num)) %>%
drop_na(total_size) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
select(auth_year, rupt, total_size)
pes.sens.nos = metaprop(rupt, total_size,
data=dat.sens.nos,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
pes.sens.nos
## events 95%-CI
## Irazabal 2011 0.0000 [ 0.0000; 7.8652]
## Juvela 2013 22.9630 [16.6751; 30.7469]
## Matsumoto 2013 2.6549 [ 0.9069; 7.5160]
## Mizoi 1995 0.0000 [ 0.0000; 15.4639]
## Morita 2012 1.8658 [ 1.4582; 2.3845]
## Murayama 2016 2.2384 [ 1.6660; 3.0014]
## Serrone 2016 0.5155 [ 0.0911; 2.8615]
## So 2010 1.1450 [ 0.3902; 3.3118]
## Sonobe 2010 1.5625 [ 0.7589; 3.1897]
## Wiebers-R 1998 1.6901 [ 1.0717; 2.6558]
##
## Number of studies combined: k = 10
##
## events 95%-CI
## Fixed effect model 2.2320 [1.9215; 2.5912]
## Random effects model 1.9027 [0.8747; 4.0888]
##
## Quantifying heterogeneity:
## tau^2 = 1.1526; tau = 1.0736; I^2 = 93.8%; H = 4.03
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 155.62 9 < 0.0001 Wald-type
## 108.28 9 < 0.0001 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
## (only used to calculate individual study results)
## - Events per 100 observations
Here we can see the point estimate and the confidence intervals varies from
All studies 1.2198 [0.7739; 1.9177] Good Quality studies 1.9027 [0.8747; 4.0888]
There is even higher heterogeniety, and thus results of the original pooled analysis need to be interpreted with caution.
dat.sens.samplesize <- sizedata %>%
mutate(total_size = coalesce(num_anr,num)) %>%
drop_na(total_size) %>%
unite(auth_year, c(auth, pub), sep = " ", remove = FALSE) %>%
filter(total_size > 500) %>%
select(auth_year, rupt, total_size)
pes.sens.samplesize = metaprop(rupt, total_size,
data=dat.sens.samplesize,
studlab=paste(auth_year),
method="GLMM",
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
pes.sens.samplesize
## events 95%-CI
## Byoun 2016 1.7628 [0.9871; 3.1288]
## Jeon 2014 0.3521 [0.0966; 1.2746]
## Morita 2012 1.8658 [1.4582; 2.3845]
## Murayama 2016 2.2384 [1.6660; 3.0014]
## Wiebers-R 1998 1.6901 [1.0717; 2.6558]
##
## Number of studies combined: k = 5
##
## events 95%-CI
## Fixed effect model 1.8131 [1.5346; 2.1411]
## Random effects model 1.7312 [1.2165; 2.4584]
##
## Quantifying heterogeneity:
## tau^2 = 0.0250; tau = 0.1582; I^2 = 35.8%; H = 1.25
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 7.28 4 0.1218 Wald-type
## 12.13 4 0.0164 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Events per 100 observations
Here we can see the point estimate and the confidence intervals varies from
All studies 1.2198 [0.7739; 1.9177] Studies with sample size > 500 aneurysms 1.7312 [1.2165; 2.4584]
Notably, the confidence intervals overlap, and I2 has reduced. Overall, suggests that the original pooled result needs to be interpreted with caution.
These plots shows the contribution of each study to the overall Q-test statistic for heterogeneity on the horizontal axis versus the influence of each study (defined as the standardized squared difference between the overall estimate based on a fixed-effects model with and without the study included in the model) on the vertical axis. Baujat 2002
baujat(pes.summary.glmm)
This shows that Juvela et al is the major source of between study heterogeneity.
We can use these sources of heterogeniety to assess for moderating variables that may contribute to the heterogeneity.
dat.juvela <- slice(dat, -12)
pes.summary.glmm.juvela = metaprop(rupt, total_size,
data=dat.juvela,
studlab=paste(auth_year),
sm="PLOGIT",
method.tau = "ML",
method.ci = "WS",
pscale = 100
)
pes.summary.glmm.juvela
## events 95%-CI
## Bor 2015 0.7444 [0.2535; 2.1655]
## Broderick 2009 1.8519 [0.5093; 6.5019]
## Burns 2009 0.5780 [0.1021; 3.2011]
## Byoun 2016 1.7628 [0.9871; 3.1288]
## Choi 2018 0.5780 [0.1021; 3.2011]
## Gibbs 2004 0.0000 [0.0000; 14.8655]
## Gondar 2016 0.8152 [0.2776; 2.3691]
## Guresir 2013 0.7812 [0.2660; 2.2715]
## Irazabal 2011 0.0000 [0.0000; 7.8652]
## Jeon 2014 0.3521 [0.0966; 1.2746]
## Jiang 2013 0.0000 [0.0000; 7.1348]
## Loumiotis 2011 0.0000 [0.0000; 2.3446]
## Matsubara 2004 0.0000 [0.0000; 2.3736]
## Matsumoto 2013 2.6549 [0.9069; 7.5160]
## Mizoi 1995 0.0000 [0.0000; 15.4639]
## Morita 2012 1.8658 [1.4582; 2.3845]
## Murayama 2016 2.2384 [1.6660; 3.0014]
## Oh 2013 0.0000 [0.0000; 16.8179]
## Serrone 2016 0.5155 [0.0911; 2.8615]
## So 2010 1.1450 [0.3902; 3.3118]
## Sonobe 2010 1.5625 [0.7589; 3.1897]
## Teo 2016 2.3810 [0.8130; 6.7666]
## Thien 2017 0.6173 [0.1090; 3.4133]
## Tsukahara 2005 3.4722 [1.4921; 7.8703]
## Tsutsumi 2000 5.3571 [1.8386; 14.6073]
## Villablanca 2013 1.5544 [0.5300; 4.4697]
## Wiebers-R 1998 1.6901 [1.0717; 2.6558]
## Wilkinson 2018 0.0000 [0.0000; 14.8655]
## Zylkowski 2015 2.7273 [0.9318; 7.7131]
##
## Number of studies combined: k = 29
##
## events 95%-CI
## Fixed effect model 1.5856 [1.3720; 1.8319]
## Random effects model 1.2849 [0.9547; 1.7274]
##
## Quantifying heterogeneity:
## tau^2 = 0.1434; tau = 0.3787; I^2 = 43.1%; H = 1.33
##
## Test of heterogeneity:
## Q d.f. p-value Test
## 27.28 28 0.5030 Wald-type
## 50.41 28 0.0058 Likelihood-Ratio
##
## Details on meta-analytical method:
## - Random intercept logistic regression model
## - Maximum-likelihood estimator for tau^2
## - Logit transformation
## - Wilson Score confidence interval for individual studies
## - Continuity correction of 0.5 in studies with zero cell frequencies
## (only used to calculate individual study results)
## - Events per 100 observations
This exploratory analaysis demonstrates greater homogeniety, with reduced and now moderate I2 and higher Q-statistic.
The point estimate and confidence intervals have changed slightly, which confirms the influence of the Juvela study.
Including Juvela - 1.2198 (0.7739; 1.9177) Excluding Juvela - 1.2849 (0.9547; 1.7274)
Nonetheless, the change is not significant from a clinical application point of view, with overall rupture risk still 1-2% overall.
baujat(pes.summary.glmm.juvela,
xlim=c(0,40),
ylim=c(0,40)
)
Keeping the influence axis the same, the significant improvement in heterogeniety is noted. This can be re-processed with smaller scales to more closely explore the result.
baujat(pes.summary.glmm.juvela,
xlim=c(0,6),
ylim=c(0,6)
)
Overall, there seems to be an acceptable level of heterogeniety given the samples that are available, and there are no studies that contribute both to heterogeniety and influence on the overall result apart from Juvela.
Studies with higher effect sizes are more likely to be published than those with lower effects. These missing studies which are not published are not identified and not integrated into the meta-analysis. This leads to publication bias meaning that the calculated effect size might be higher, and the true effect size lower since studies with lower effects were not published.
In addition, large studies are more likely to get published regardless of the effect size. Small studies are at the greatest risk, since they are only generally published if there is a large effect size.
Thus when assessing for publication bias, conventional assessment is focused on identifying whether small studies with small effect sizes are missing or not.
This can be performed using a funnel plot, however, we will later discuss why a funnel plot analysis may not be required.
funnel(pes.summary.glmm)
Here we can see that the funnel plot is assymetrical with visual assessment. The assymetry is primarily driven by 1 study in the top right corner with a large effect. We can identify the study by labelling the funnel plot.
funnel(pes.summary.glmm,
studlab = TRUE
)
There are many possible sources of funnel plot assymetry - selection bias from publication and selective outcome reporting bias, poor methodological quality leading to spuriously elevated effecs in small studies, true heterogeniety, statistical modeling artefacts and chance.
In our case, the most likely explanation for this appearance of the funnel plot is due to the outlier rupture risk in the Juvela study that contributes to true heterogeniety from true differences in rupture proportion.
In general, testing for funnel plot assymetry should always be performed in the context of visual assessment, and while there are many potential statistical tests for funnel plots including Egger 1997, Harbord 2006, Peters 2006 or Rücker 2008, even Cochrane suggests that tests for funnel plot asymmetry should be used in only a minority of meta-analyses (Ioannidis 2007b).
Consider the data in the form of a 2 x 2 table, prior SAH as the exposure and rupture as the outcome.
ai = prior SAH and rupture +ve bi = prior SAH and rupture -ve ci = no prior SAH and rupture +ve di = no prior SAH, and rupture -ve
n1i = ai + bi = total aneurysms with prior SAH n2i = ci + di = total aneurysms without prior SAH
Rupture of the aneurysm is considered a rare event ie <1%, and the data are sparse with single 0s or double 0s in the 2 x 2 table.
This is methodologically challenging, and the choice of meta-analyis method is important. As we discussed The most common methods of MA is the inverse variance method, using the DerSimonian and Laird random effects model.
The DL method calculates an effect size separately for each study, with the standard error. The effect sizes are then synthesised across studies. However, when one of the cells has a 0 which is common with rare events, the inverse variance cannot be used because the variances become undefined.
There are 2 options for correction: use of a continuity correction ie adding a fixed value usually 0.5 or using calculating the risk difference. However using a continuity correction leads to excess bias in the effect, and can influence the result and conclusions (Stinjen 2010). Risk differences have poor statistical properties with too wide intervals when events are rare, and are also not recommended (Bradburn 2007)
There are also issues on how to handle double 0 studies, since these may also carry some meaningful data due to their sample size (Keus 2009).
In summary, there is debate on what is the best model to meta-analyse rare events. Use of Peto’s method to estimate the OR is often suggested for rare events, since this includes single zero studies without a continuity correction. Double zero studies are excluded.
However, to use Peto’s method, the following three conditions need to hold true ie a rare event <1%, the exposure / treatment groups are balanced, and the effects are not very large (Cochrane handbook). Unless all three are true, then Peto’s method also may give biased results. In our dataset, the groups with and without prior SAH are unbalanced ie >1:3, so Peto’s method is not appropriate.
Alternatively,the Mantel-haenszel without zero cell continuity correction can be used for unbalanced exposure / treatment groups.(Efthimiou 2018) This method provides a fixed effects meta-anlysis so is best used in the absence of heterogeniety and does exclude double zero studies. In our dataset, there is heterogeniety, and thus a random effects meta-analysis is preferred.
A generalised linear mixed method (GLMM) model can be used for odds-ratio meta-analysis for rare outcomes, specifically by utilising a hypergeometric-normal (HN) model for the meta-analysis of odds ratios (Stinjen 2010). This is appropriate since the event aneurysm rupture is not a true binomial distribution, but in fact a hypergeometric distribution.
The hypergeometric distribution is best explained by sampling coloured balls in an urn. Hypergeometric distribution is sampling without replacement compared to a binomial distribution where there is sampling with replacement, and the probability of success is required.
If the balls are of different weight or size, ie one has a greater chance of being chosen, this is a noncentral hypergeometric distribution. The non central hypergeometric distribution can be of the Wallenius type or Fisher type.
Wallenius type is the biased urn mode, where balls are taken out 1 by 1. Fisher type occurs when the outcome is known, and the number of balls in the urn and their colour need to be calculated. For large samples with a common outcome, the binomial distribution is a reasonable estimate. However in populations that are small, or outcomes that are rare, such as in our dataset where certain aneurysms have features that make them more prone to rupure ie heavier weighted ball, thus each outcome influences the probability of the next event. Thus the non central hyperegeometric distribution is required.
Recent developments in statistical packages, including in R, make these computationaly intensive methods practical and feasible. The HN model performs well, with minimal bias, and satsifactory coverage of the 95% CIs with rare events.
Mete-regression can also be included easily by extending the model to include a study level covariate.
Structure the data in this format
Author This signifies the column for the study label (i.e., the first author)
ai = prior SAH and rupture +ve bi = prior SAH and rupture -ve ci = no prior SAH and rupture +ve di = no prior SAH, and rupture -ve
n1i = ai + bi = total aneurysms with prior SAH n2i = ci + di = total aneurysms without prior SAH
Assumptions
For num_anr is not known, then num (of patients) is brought forward assuming 1 patient has 1 aneurysm.
For aneurysms in size cohort with prior SAH, this is estimated by using same proportion of patients with prior SAH in the total observed cohort, and applying this to the number of aneurysms in that specific size cohort.
Use the rma function from metafor to meta-analyse log odds ratio using conditional logistic regression model with random effects meta-analysis. The conditional generalized linear mixed-effects model with exact likelihood (model=“CM.EL”) avoids having to model study level variability by conditioning on the total numbers of cases/events in each study. For the odds ratio, this leads to a non-central hypergeometric distribution for the data within each study and the corresponding model is then a mixed-effects conditional logistic model.
Only studies that included patients both with and without history of prior SAH are included.
res <- rma.glmm(measure = "OR",
ai = ai,
bi = bi,
ci = ci,
di = di,
data = dat.psahpos,
slab = auth_year,
model = "CM.EL",
method = "ML"
)
## Warning in rma.glmm(measure = "OR", ai = ai, bi = bi, ci = ci, di = di, :
## Studies with NAs omitted from model fitting.
## Warning in rma.glmm(measure = "OR", ai = ai, bi = bi, ci = ci, di = di, : Some
## yi/vi values are NA.
res
##
## Random-Effects Model (k = 8; tau^2 estimator: ML)
## Model Type: Conditional Model with Exact Likelihood
##
## tau^2 (estimated amount of total heterogeneity): 1.3341 (SE = 1.6759)
## tau (square root of estimated tau^2 value): 1.1550
## I^2 (total heterogeneity / total variability): 45.4492%
## H^2 (total variability / sampling variability): 1.8332
##
## Tests for Heterogeneity:
## Wld(df = 7) = 2.8946, p-val = 0.8946
## LRT(df = 7) = 14.4598, p-val = 0.0436
##
## Model Results:
##
## estimate se zval pval ci.lb ci.ub
## 0.4589 0.6674 0.6876 0.4917 -0.8492 1.7671
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
View the results as a forest
forest(res)
transform the log OR to OR
res2 <- predict(res, transf=exp,
digits=2
)
res2
##
## pred ci.lb ci.ub cr.lb cr.ub
## 1.58 0.43 5.85 0.12 21.62
The predicted OR and log OR both have confidence intervals that cross 1, and the confidence intervals are wide.
Overall, taking into account the limitations of the data, prior SAH may not increase rupture risk in small unruptured aneurysms measuring 10 mm or less. In addition, the overall rupture risk for conservatively managed aneurysms is more uncertain than previously considered with up to 2% risk of rupture.
These synthesised data analyses are considered exploratory and hypothesis generating, and additional data are required.